#include <iostream>
#include <memory>
using namespace std;

class Target
{
public:
    virtual void Request()
    {
        cout << "Target::Request..." << endl;
    }
    virtual ~Target()
    {
    }
};

class Adaptee
{
public:
    void SpecificRequest()
    {
        cout << "Adaptee::SpecificRequest..." << endl;
    }
};

class Adapter : public Target, private Adaptee
{
public:
    Adapter(Adaptee *ade) : _ade(ade)
    {
    }
    void Request() override
    {
        _ade->SpecificRequest();
    }

private:
    std::unique_ptr<Adaptee> _ade;
};

int main()
{
    std::unique_ptr<Target> adapter(new Adapter(new Adaptee()));
    adapter->Request();
    return 0;
}
